package com.gluck.cases.app.biz.impl;

import com.github.pagehelper.PageInfo;
import com.gluck.cases.core.modal.dto.AdminUserDTO;
import com.gluck.cases.core.modal.entity.AdminUser;
import com.gluck.cases.core.modal.req.AdminUserReq;
import com.gluck.cases.core.modal.req.AdminUserSearchReq;

import java.util.List;

/**
 * @ClassName AdminUserService
 * @Desc AdminUserService
 * @Author I am Gluck
 * @Date 2022/5/16 - 4:29 下午
 **/
public interface AdminUserService {

    /**
     * 功能描述: 查询用户是否存在
     * @Params [username]
     * @Return boolean
     * @Author I`m Gluck
     * @Date 2022/5/17
     */
    boolean existAdminUserByUsername(String username);

    /**
     * 功能描述: 创建新用户
     * @Params [userReq]
     * @Return boolean
     * @Author I`m Gluck
     * @Date 2022/5/19
     */
    boolean createNewUser(AdminUserReq userReq);

    /**
     * 功能描述: 登陆查询用户
     * @Params [userReq]
     * @Return boolean
     * @Author I`m Gluck
     * @Date 2022/5/19
     */
    boolean queryUser(AdminUserReq userReq);

    /**
     * 功能描述: 生成用户token
     * @Params [userReq]
     * @Return java.lang.String
     * @Author I`m Gluck
     * @Date 2022/5/19
     */
    String buildUserToken(AdminUserReq userReq);

    /**
     * 功能描述: 查询用户列表
     * @Params [startPage, endPage]
     * @Return com.github.pagehelper.PageInfo<com.gluck.stock.oauth.core.modal.entity.AdminUser>
     * @Author I`m Gluck
     * @Date 2022/5/23
     */
    PageInfo<AdminUser> queryUserList(Integer startPage, Integer endPage);

    // 更新用户
    AdminUser updateUser(AdminUserReq user);
    // 删除用户
    boolean deleteUser(Long userId);
    //修改密码
    boolean changePassword(String username, String newPassword);

    boolean deleteUsers(List<Long> ids);

    PageInfo<AdminUser> searchUsers(AdminUserSearchReq req);

    /**
     * 功能描述: 获取当前用户信息 这里需要强调一点 获取当前用户信息必须是用户已经认证登陆 token
     * 已经放入 SimpleAuthenticationInfo维护，否则无法获取token 会出npe 异常
     * @Params []
     * @Return com.gluck.stock.oauth.core.modal.dto.AdminUserDTO
     * @Author I`m Gluck
     * @Date 2022/5/28
     */
    AdminUserDTO getCurrentUserInfo();
}
